home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / util / cli / cliutils_mra.lha / Sources / FreeX.a < prev    next >
Encoding:
Text File  |  1997-06-17  |  4.1 KB  |  274 lines

  1. ;
  2. ; FreeX v1.0
  3. ; written by Mauro Panigada
  4. ;
  5. ; $VER: FreeX.a v1.0 (1997.04.17) by Mauro Panigada
  6. ;
  7. ; Opened: 1997.04.17
  8. ; Closed: 1997.04.18
  9. ;
  10. ; Shows Volume Name, FileSystem, Total bytes, Free Bytes, Total
  11. ; blocks, Free Blocks.
  12. ;
  13. ; Inspired by a dos, too long program, Free (unknow author)...
  14. ;
  15. ; Pure.
  16. ;
  17.  
  18.         incdir    "dh0:progr/assem/include/"
  19.         include    "exec/types.i"
  20.         include    "exec/memory.i"
  21.         include    "exec/libraries.i"
  22.         include    "exec/exec_lib.i"
  23.         include    "dos/dos.i"
  24.         include    "dos/dosextens.i"
  25.         include    "dos/dos_lib.i"
  26.         include    "utility/utility_lib.i"
  27.  
  28.  
  29. stov        MACRO
  30.         move.\0    \1,\2(a5)
  31.         ENDM
  32.  
  33. putv        MACRO
  34.         move.\0    \1(a5),\2
  35.         ENDM
  36.  
  37. clrv        MACRO
  38.         clr.\0    \1(a5)
  39.         ENDM
  40.  
  41. tstv        MACRO
  42.         tst.\0    \1(a5)
  43.         ENDM
  44.  
  45.  
  46. openlib        MACRO
  47.         lea    \1name(pc),a1
  48.         moveq    #\2,d0
  49.         call    OpenLibrary
  50.         stov.l    d0,_\1base
  51.         beq    exit
  52.         ENDM
  53.  
  54. closelib    MACRO
  55.         putv.l    _\1base,a1
  56.         call    CloseLibrary
  57.         ENDM
  58.  
  59.  
  60. call        MACRO
  61.         IFEQ    NARG-1
  62.         jsr    _LVO\1(a6)
  63.         ELSE
  64.         putv.l    _\2base,a6
  65.         jsr    _LVO\1(a6)
  66.         ENDC
  67.         ENDM
  68.  
  69. base        MACRO
  70.         move.l    _\1base(a5),a6
  71.         ENDM
  72.  
  73.  
  74.  
  75.     STRUCTURE reserved,0
  76.  
  77.         LONG    _execbase
  78.         LONG    _dosbase
  79.         LONG    _utilitybase
  80.  
  81.         LABEL    _array
  82.         LONG    _name
  83.  
  84.         STRUCT    _idstruct,id_SIZEOF
  85.  
  86.         STRUCT    _buffer,32
  87.  
  88.         LONG    _disktype
  89.         BYTE    unusable
  90.         BYTE    _kludge
  91.  
  92.         LABEL    _argument
  93.         LONG    _volname
  94.         LONG    _system
  95.         LONG    _numblocks
  96.         LONG    _numblocksfree
  97.         LONG    _numbytes
  98.         LONG    _freebytes
  99.  
  100.         LABEL    reserved_size
  101.  
  102.  
  103.  
  104.     SECTION    FreeX,CODE
  105.  
  106.         bra.s    start
  107.  
  108.         dc.b    "$VER: "
  109.         dc.b    "FreeX 1.0 (1997.04.17) "
  110.         dc.b    "by Mauro Panigada",13,10,0
  111.         even
  112.  
  113. start
  114.         moveq    #reserved_size,d0
  115.         move.l    4.w,a6
  116.         move.l    #MEMF_ANY|MEMF_CLEAR,d1
  117.         call    AllocMem
  118.         tst.l    d0
  119.         bne.s    allocok
  120.         rts
  121. allocok        move.l    d0,a5
  122.  
  123.         moveq    #0,d7        ; d7 = error exit
  124.         move.l    a6,(a5)
  125.  
  126.         moveq    #0,d6
  127.         move.l    d6,d5
  128.  
  129.         openlib    dos,39
  130.         openlib    utility,39
  131.  
  132.         lea    _array(a5),a0
  133.         move.l    a0,d2
  134.         lea    template(pc),a0
  135.         move.l    a0,d1
  136.         moveq    #0,d3
  137.         call    ReadArgs,dos
  138.         move.l    d0,d6        ; d6 = rdargs
  139.         bne.s    rdok
  140.  
  141.         lea    standard(pc),a0
  142.         stov.l    a0,_name
  143.         bra.s    rdok
  144.  
  145. error0        call    IoErr
  146.         move.l    d0,d1
  147.         lea    tasky(pc),a0
  148.         move.l    a0,d2
  149.         call    PrintFault
  150.         moveq    #RETURN_FAIL,d7
  151.         bra    exit
  152.  
  153. rdok
  154.         putv.l    _name,d1
  155.         moveq    #ACCESS_READ,d2
  156.         call    Lock
  157.         move.l    d0,d5        ; d5 = lock
  158.         beq.s    error0
  159.  
  160.         lea    _idstruct(a5),a0
  161.         move.l    a0,a3
  162.         move.l    a0,d2
  163.         move.l    d0,d1
  164.         call    Info
  165.         tst.l    d0
  166.         beq.s    error0
  167.  
  168.         move.l    id_NumBlocks(a3),d0
  169.         stov.l    d0,_numblocks
  170.         move.l    id_NumBlocksUsed(a3),d1
  171.         move.l    d0,d2            ; d2=blocks
  172.         sub.l    d1,d0            ; d0=free blocks
  173.         stov.l    d0,_numblocksfree
  174.         move.l    id_BytesPerBlock(a3),d3
  175.         move.l    d3,d1
  176.         call    UMult32,utility
  177.         stov.l    d0,_freebytes
  178.         move.l    d3,d1
  179.         putv.l    _numblocks,d0
  180.         call    UMult32
  181.         stov.l    d0,_numbytes
  182.  
  183.         stov.l    id_DiskType(a3),_disktype
  184.         lea    _disktype(a5),a0
  185.         cmp.b    #1,3(a0)
  186.         bne.s    noffs
  187.         lea    ffs.label(pc),a0
  188. noffs        cmp.b    #2,3(a0)
  189.         bne.s    noidos
  190.         lea    idos.label(pc),a0
  191. noidos        cmp.b    #3,3(a0)
  192.         bne.s    noiffs
  193.         lea    iffs.label(pc),a0
  194. noiffs        cmp.b    #4,3(a0)
  195.         bne.s    nofddos
  196.         lea    fddos.label(pc),a0
  197. nofddos        cmp.b    #5,3(a0)
  198.         bne.s    nofdffs
  199.         lea    fdffs.label(pc),a0
  200. nofdffs
  201.         stov.l    a0,_system
  202.  
  203.         move.l    id_VolumeNode(a3),a0
  204.         adda.l    a0,a0
  205.         adda.l    a0,a0        ; bptr to aptr
  206.         move.l    dl_Name(a0),a0
  207.         adda.l    a0,a0
  208.         adda.l    a0,a0
  209.         moveq    #0,d0
  210.         move.b    (a0)+,d0
  211.         lea    _buffer(a5),a1
  212.         stov.l    a1,_volname
  213.         subq.w    #1,d0
  214. loopi        move.b    (a0)+,(a1)+
  215.         dbf    d0,loopi
  216.         clr.b    (a1)
  217.  
  218.         lea    testo(pc),a0
  219.         move.l    a0,d1
  220.         lea    _argument(a5),a0
  221.         move.l    a0,d2
  222.         call    VPrintf,dos
  223.  
  224. exit
  225.         move.l    d6,d1
  226.         beq.s    ex0
  227.         call    FreeArgs,dos
  228.  
  229. ex0        move.l    d5,d1
  230.         beq.s    ex1
  231.         call    UnLock,dos
  232. ex1
  233.         closelib dos
  234.         closelib utility
  235.  
  236.         move.l    (a5),a6
  237.         move.l    a5,a1
  238.         moveq    #reserved_size,d0
  239.         call    FreeMem
  240.  
  241.         rts
  242.  
  243.  
  244.  
  245. dosname        dc.b    "dos.library",0
  246.         even
  247. utilityname    dc.b    "utility.library",0
  248.         even
  249. template    dc.b    "DEVICE",0
  250.         even
  251. tasky        dc.b    "FreeX",0
  252.         even
  253. testo        dc.b    "Volume name:  %s",10
  254.         dc.b    "Filesystem:   %s",10
  255.         dc.b    "Total blocks: %ld",10
  256.         dc.b    "Free blocks:  %ld",10
  257.         dc.b    "Total bytes:  %ld",10
  258.         dc.b    "Free bytes:   %ld",10
  259.         dc.b    0
  260.         even
  261. ffs.label    dc.b    "FFS",0
  262. idos.label    dc.b    "INTERNATIONAL DOS",0
  263.         even
  264. iffs.label    dc.b    "INTERNATIONAL FFS",0
  265.         even
  266. fddos.label    dc.b    "FASTDIR DOS",0
  267.         even
  268. fdffs.label    dc.b    "FASTDIR FFS",0
  269.         even
  270. standard    dc.b    "sys:",0
  271.         even
  272.  
  273.  
  274.         END